/*
 *  Copyright 2013 National Institute of Advanced Industrial Science and Technology
 *  
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package org.sss.mapreduce.example;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.HashMap;

import org.sss.client.DataGetter;
import org.sss.client.SssClient;
import org.sss.mapreduce.GroupID;
import org.sss.mapreduce.SssException;
import org.sss.mapreduce.Tuple;
import org.sss.mapreduce.datatype.PackableInt;

public class KMeansResultPrinter {
  SssClient client;

  public KMeansResultPrinter(SssClient client) throws RemoteException, NotBoundException, SssException {	
    this.client = client;
  }

  public HashMap<Integer, Center> readMap(GroupID groupID) throws SssException {
    HashMap<Integer, Center> centers = new HashMap<Integer, Center>();

    DataGetter<PackableInt, Center> getter = DataGetter.create(
        client, PackableInt.class, Center.class, groupID);
    try {
      for (Tuple<PackableInt, Center> kv: getter) {
        centers.put(kv.getKey().get(), kv.getValue());
      }
    } finally {
      getter.close();
    }

    return centers;
  }

  public static void main(String[] args) throws Exception {
    SssClient client = new SssClient(args);

    String[] others = client.getArgs();

    if (others.length < 1) {
      System.err.println("no group id");
      System.exit(1);
    }
    GroupID table = GroupID.createFromString(others[0]);
    KMeansResultPrinter p = new KMeansResultPrinter(client);

    HashMap<Integer, Center> map = p.readMap(table);
    System.out.println(map);
  }
}
